home *** CD-ROM | disk | FTP | other *** search
/ Windows Game Programming for Dummies (2nd Edition) / WinGamProgFD.iso / mac / DirectX SDK / DXSDK / include / DShowIDL / Segment.idl < prev    next >
Text File  |  2001-10-08  |  72KB  |  1,221 lines

  1. //------------------------------------------------------------------------------
  2. // File: Segment.idl
  3. //
  4. // Desc: IDL source for devices segments for msvid.dll
  5. //
  6. // Copyright (c) 1999-2001, Microsoft Corporation.  All rights reserved.
  7. //------------------------------------------------------------------------------
  8.  
  9. // This file will be processed by the MIDL tool to
  10. // produce the type library (msvideo.tlb) and marshalling code.
  11.  
  12.  
  13. // Copyright (c) Microsoft Corporation 1998-2001
  14. //
  15. cpp_quote("//+-------------------------------------------------------------------------")
  16. cpp_quote("//")
  17. cpp_quote("//  Microsoft Windows")
  18. cpp_quote("//  Copyright (C) Microsoft Corporation, 1999-2001.")
  19. cpp_quote("//")
  20. cpp_quote("//--------------------------------------------------------------------------")
  21. cpp_quote("#pragma once")
  22.  
  23. #ifndef TUNING_MODEL_ONLY
  24.  
  25. #include <olectl.h>
  26. cpp_quote("#include <olectl.h>")
  27.  
  28. #ifndef DO_NO_IMPORTS
  29. import "oaidl.idl";
  30. import "ocidl.idl";
  31. import "strmif.idl";
  32. import "mstve.idl";
  33. import "mstvca.idl";
  34. import "tuner.idl";
  35. #endif
  36.  
  37. typedef enum {
  38.     dispidName,
  39.     dispidStatus,
  40.     dispidDevImageSourceWidth,
  41.     dispidDevImageSourceHeight,
  42.     dispidDevCountryCode,
  43.     dispidDevOverScan,
  44.     dispidSegment,
  45.     dispidDevVolume,
  46.     dispidDevBalance,
  47.     dispidDevPower,
  48.     dispidTuneChan,
  49.     dispidDevVideoSubchannel,
  50.     dispidDevAudioSubchannel,
  51.     dispidChannelAvailable,
  52.     dispidDevVideoFrequency,
  53.     dispidDevAudioFrequency,
  54.     dispidCount,
  55.     dispidDevFileName,
  56.     dispidVisible,
  57.     dispidOwner,
  58.     dispidMessageDrain,
  59.     //dispidPosition,
  60.     dispidViewable,
  61.     dispidDevView,
  62.     dispidKSCat,
  63.     dispidCLSID,
  64.     dispid_KSCat,
  65.     dispid_CLSID,
  66.     dispidTune,
  67.     dispidTS,
  68.     dispidDevSAP,
  69.     dispidClip,
  70.     dispidRequestedClipRect,
  71.     dispidClippedSourceRect,
  72.     dispidAvailableSourceRect,
  73.     dispidMediaPosition,
  74.     dispidDevRun,
  75.     dispidDevPause,
  76.     dispidDevStop,
  77.     dispidCCEnable,
  78.     dispidDevStep,
  79.     dispidDevCanStep,
  80.     dispidSourceSize,
  81.     dispid_playtitle,
  82.     dispid_playchapterintitle,
  83.     dispid_playchapter,
  84.     dispid_playchaptersautostop,
  85.     dispid_playattime,
  86.     dispid_playattimeintitle,
  87.     dispid_playperiodintitleautostop,
  88.     dispid_replaychapter,
  89.     dispid_playprevchapter,
  90.     dispid_playnextchapter,
  91.     dispid_playforwards,
  92.     dispid_playbackwards,
  93.     dispid_stilloff,
  94.     dispid_audiolanguage,
  95.     dispid_showmenu,
  96.     dispid_resume,
  97.     dispid_returnfromsubmenu,
  98.     dispid_buttonsavailable,
  99.     dispid_currentbutton,
  100.     dispid_SelectAndActivateButton,
  101.     dispid_ActivateButton,
  102.     dispid_SelectRightButton,
  103.     dispid_SelectLeftButton,
  104.     dispid_SelectLowerButton,
  105.     dispid_SelectUpperButton,
  106.     dispid_ActivateAtPosition,
  107.     dispid_SelectAtPosition,
  108.     dispid_ButtonAtPosition,
  109.     dispid_NumberOfChapters,
  110.     dispid_TotalTitleTime,
  111.     dispid_TitlesAvailable,
  112.     dispid_VolumesAvailable,
  113.     dispid_CurrentVolume,
  114.     dispid_CurrentDiscSide,
  115.     dispid_CurrentDomain,
  116.     dispid_CurrentChapter,
  117.     dispid_CurrentTitle,
  118.     dispid_CurrentTime,
  119.     dispid_FramesPerSecond,
  120.     dispid_DVDTimeCode2bstr,
  121.     dispid_DVDDirectory,
  122.     dispid_IsSubpictureStreamEnabled,
  123.     dispid_IsAudioStreamEnabled,
  124.     dispid_CurrentSubpictureStream,
  125.     dispid_SubpictureLanguage,
  126.     dispid_CurrentAudioStream,
  127.     dispid_AudioStreamsAvailable,
  128.     dispid_AnglesAvailable,
  129.     dispid_CurrentAngle,
  130.     dispid_CCActive,
  131.     dispid_CurrentCCService,
  132.     dispid_SubpictureStreamsAvailable,
  133.     dispid_SubpictureOn,
  134.     dispid_DVDUniqueID,
  135.     dispid_EnableResetOnStop,
  136.     dispid_AcceptParentalLevelChange,
  137.     dispid_NotifyParentalLevelChange,
  138.     dispid_SelectParentalCountry,
  139.     dispid_SelectParentalLevel,
  140.     dispid_TitleParentalLevels,
  141.     dispid_PlayerParentalCountry,
  142.     dispid_PlayerParentalLevel,
  143.     dispid_Eject,
  144.     dispid_UOPValid,
  145.     dispid_SPRM,
  146.     dispid_GPRM,
  147.     dispid_DVDTextStringType,
  148.     dispid_DVDTextString,
  149.     dispid_DVDTextNumberOfStrings,
  150.     dispid_DVDTextNumberOfLanguages,
  151.     dispid_DVDTextLanguageLCID,
  152.     dispid_RegionChange,
  153.     dispid_DVDAdm,
  154.     dispid_DeleteBookmark,
  155.     dispid_RestoreBookmark,
  156.     dispid_SaveBookmark,
  157.     dispid_SelectDefaultAudioLanguage,
  158.     dispid_SelectDefaultSubpictureLanguage,
  159.     dispid_PreferredSubpictureStream,
  160.     dispid_DefaultMenuLanguage,
  161.     dispid_DefaultSubpictureLanguage,
  162.     dispid_DefaultAudioLanguage,
  163.     dispid_DefaultSubpictureLanguageExt,
  164.     dispid_DefaultAudioLanguageExt,
  165.     dispid_LanguageFromLCID,
  166.     dispid_KaraokeAudioPresentationMode,
  167.     dispid_KaraokeChannelContent,
  168.     dispid_KaraokeChannelAssignment,
  169.     dispid_RestorePreferredSettings,
  170.     dispid_ButtonRect,
  171.     dispid_DVDScreenInMouseCoordinates,
  172.     dispid_CustomCompositorClass,
  173.     dispidCustomCompositorClass,
  174.     dispid_CustomCompositor,
  175.     dispidMixerBitmap,
  176.     dispid_MixerBitmap,
  177.     dispidMixerBitmapOpacity,
  178.     dispidMixerBitmapRect,
  179.     dispidSetupMixerBitmap,
  180.     dispidUsingOverlay,
  181.     dispidDisplayChange,
  182.     dispidRePaint,
  183.     dispid_IsEqualDevice,
  184.     dispidrate,
  185.     dispidposition,
  186.     dispidpositionmode,
  187.     dispidlength,
  188.     dispidChangePassword,
  189.     dispidSaveParentalLevel,
  190.     dispidSaveParentalCountry,
  191.     dispidConfirmPassword,
  192.     dispidGetParentalLevel,
  193.     dispidGetParentalCountry,
  194.     dispidDefaultAudioLCID,
  195.     dispidDefaultSubpictureLCID,
  196.     dispidDefaultMenuLCID,
  197.     dispidBookmarkOnStop,
  198.     dispidMaxVidRect,
  199.     dispidMinVidRect,
  200.     dispidCapture,
  201.     dispid_DecimateInput,
  202.     dispidAlloctor,
  203.     dispid_Allocator,
  204.     dispidAllocPresentID,
  205.     dispidSetAllocator,
  206.     dispid_SetAllocator,
  207.     LastReservedDeviceDispid=0x3fff
  208. } SegDispidList;
  209.  
  210. typedef enum {
  211.     eventidStateChange,
  212.     eventidOnTuneChanged,
  213.     eventidEndOfMedia,
  214.     eventidDVDNotify,
  215.     eventidPlayForwards,
  216.     eventidPlayBackwards,
  217.     eventidShowMenu,
  218.     eventidResume,
  219.     eventidSelectOrActivateButton,
  220.     eventidStillOff,
  221.     eventidPauseOn,
  222.     eventidChangeCurrentAudioStream,
  223.     eventidChangeCurrentSubpictureStream,
  224.     eventidChangeCurrentAngle,
  225.     eventidPlayAtTimeInTitle,
  226.     eventidPlayAtTime,
  227.     eventidPlayChapterInTitle,
  228.     eventidPlayChapter,
  229.     eventidReplayChapter,
  230.     eventidPlayNextChapter,
  231.     eventidStop,
  232.     eventidReturnFromSubmenu,
  233.     eventidPlayTitle,
  234.     eventidPlayPrevChapter,
  235.     eventidChangeKaraokePresMode,
  236.     eventidChangeVideoPresMode,
  237.     eventidOverlayUnavailable,
  238.     LastReservedDeviceEvent=0x3fff
  239. } SegEventidList;
  240.  
  241. typedef enum {
  242.     FrameMode,
  243.     TenthsSecondsMode
  244. } PositionModeList;
  245.  
  246.  
  247. //*****************************************************************************
  248. //*****************************************************************************
  249. ///////////////////////////////////////////////////////////////////////////////
  250. //
  251. // interfaces
  252. //
  253. ///////////////////////////////////////////////////////////////////////////////
  254. //*****************************************************************************
  255. //*****************************************************************************
  256.  
  257. //*****************************************************************************
  258. ///////////////////////////////////////////////////////////////////////////////
  259. //
  260. //  Utility Interfaces
  261. //
  262. ///////////////////////////////////////////////////////////////////////////////
  263. //*****************************************************************************
  264.  
  265. interface IMSVidRect;
  266.  
  267. [object,
  268.         uuid(7F5000A6-A440-47ca-8ACC-C0E75531A2C2),
  269.         helpstring("Automation Compliant GDI Rect with Automatic HWND Scaling"),
  270.         pointer_default(unique)
  271. ]
  272. interface IMSVidRect : IDispatch {
  273.     [propget, helpstring("Rectangle Top")] HRESULT Top([out, retval] LONG* TopVal);
  274.     [propput, helpstring("Rectangle Top")] HRESULT Top([in] LONG TopVal);
  275.     [propget, helpstring("Rectangle Left")] HRESULT Left([out, retval] LONG* LeftVal);
  276.     [propput, helpstring("Rectangle Left")] HRESULT Left([in] LONG LeftVal);
  277.     [propget, helpstring("Rectangle Width")] HRESULT Width([out, retval] LONG* WidthVal);
  278.     [propput, helpstring("Rectangle Width")] HRESULT Width([in] LONG WidthVal);
  279.     [propget, helpstring("Rectangle Height")] HRESULT Height([out, retval] LONG* HeightVal);
  280.     [propput, helpstring("Rectangle Height")] HRESULT Height([in] LONG HeightVal);
  281.     [propget, helpstring("Coordinates relative to HWnd")] HRESULT HWnd([out, retval] HWND* HWndVal);
  282.     [propput, helpstring("Coordinates relative to HWnd")] HRESULT HWnd([in] HWND HWndVal);
  283.     [propput, helpstring("New Rectangle Values")] HRESULT Rect([in] IMSVidRect* RectVal);
  284. };
  285.  
  286. interface IMSVidGraphSegmentContainer;
  287. interface IMSVidGraphSegment;
  288. interface IEnumMSVidGraphSegment;
  289.  
  290.  
  291. //*****************************************************************************
  292. ///////////////////////////////////////////////////////////////////////////////
  293. //
  294. //  Segment Container interface allowing segments to find and access other segments
  295. //
  296. ///////////////////////////////////////////////////////////////////////////////
  297. //*****************************************************************************
  298.         ///////////////////////////////////////////////////////////////////////////////////////
  299.         // if segments need to change the control state(stop, run, pause, etc) or get any stock
  300.         // properties that are also made available to clients such as HWND, then they should simply
  301.         // QI for the main IMSVidCtl interface.  there's no reason to implement this stuff twice.
  302.         [object,
  303.                 uuid(3DD2903D-E0AA-11d2-B63A-00C04F79498E),
  304.                 helpstring("DShow Graph Segment Container"),
  305.                 pointer_default(unique)
  306.         ]
  307.         interface IMSVidGraphSegmentContainer : IUnknown {
  308.                 [propget, helpstring("Graph")] HRESULT Graph([out] IGraphBuilder **ppGraph);
  309.                 [propget, helpstring("Input Segment")] HRESULT Input([out] IMSVidGraphSegment **pInput);
  310.                 [propget, helpstring("Output Segment")] HRESULT Outputs([out] IEnumMSVidGraphSegment **pOutputs);
  311.                 [propget, helpstring("Video Renderer")] HRESULT VideoRenderer([out] IMSVidGraphSegment **pVR);
  312.                 [propget, helpstring("Audio Renderer")] HRESULT AudioRenderer([out] IMSVidGraphSegment **pAR);
  313.                 [propget, helpstring("Features")] HRESULT Features([out] IEnumMSVidGraphSegment **pOutputs);
  314.                 [propget, helpstring("Composites")] HRESULT Composites([out] IEnumMSVidGraphSegment **pComposites);
  315.                 [propget, helpstring("Container")] HRESULT ParentContainer([out] IUnknown **ppContainer);           // this allows the segments to get out and walk the dhtml hierarchy             
  316.                 HRESULT Decompose(IMSVidGraphSegment *pSegment);
  317.                 HRESULT IsWindowless(); // the stock hwnd on the main vidctl is only valid if this is set
  318.                 // be very careful using GetFocus(think twice and then don't).  it is recommended that systems follow the model 
  319.                 // laid out by atvef and smil wherein the convergence of UI and video are implemented by providing the user interface 
  320.                 //  as standard html/xml, etc with video incorporated as an element of this standard presentation.   
  321.                 // however, in the special caseof dvd there is a prexisting standard which is conceptually inside out.
  322.                 // that is, the UI is embedded in the video stream rather than the stream being embedded in the UI.
  323.                 // as a consequence, buttons and menus can asynchronously pop up out of the video stream source(dvd navigator) 
  324.                 // and, may require the focus.  this inside out paradigm is the only situation where
  325.                 // getfocus should be used.  otherwise, weird non-standard interactions will result.
  326.                 HRESULT GetFocus();
  327.         };
  328.         
  329.  
  330. ///////////////////////////////////////////////////////////////////////////////
  331. //
  332. //  Direct Show Segment extension interfaces
  333. //
  334. ///////////////////////////////////////////////////////////////////////////////
  335.  
  336.         typedef enum MSVidSegmentType {
  337.                 MSVidSEG_SOURCE,
  338.                 MSVidSEG_XFORM,
  339.                 MSVidSEG_DEST,
  340.         } MSVidSegmentType;
  341.  
  342.         ///////////////////////////////////////////////////////////////////////////////////////
  343.         [object,
  344.                 uuid(1C15D482-911D-11d2-B632-00C04F79498E),
  345.                 helpstring("DShow Graph Segment Builder Interface"),
  346.                 pointer_default(unique)
  347.         ]
  348.         interface IMSVidGraphSegment : IPersist {
  349.         // note: we separate init and load(via put_Container) because we want to associate device object
  350.         // with their device moniker at creation time.  but, we don't want to take the
  351.         // hit of loading their filters until we're ready to build the graph because this segment may not get used
  352.                 [propget] HRESULT Init([out, retval] IUnknown **pInit);
  353.                 [propput] HRESULT Init([in] IUnknown *pInit);
  354.                 HRESULT EnumFilters([out] IEnumFilters **pNewEnum); //filters in seg
  355.                 [propget, helpstring("Graph that contains this segment")] HRESULT Container([out, retval] IMSVidGraphSegmentContainer **ppCtl);
  356.                 [propput, helpstring("Graph that contains this segment")] HRESULT Container([in] IMSVidGraphSegmentContainer *pCtl);
  357.                 [propget, helpstring("Type of Segment")] HRESULT Type([out, retval] MSVidSegmentType *pType);
  358.                 [propget, helpstring("Category this segment is for")] HRESULT Category([out, retval] GUID *pGuid);
  359.                 HRESULT Build();   // used to notify non-composition segment that the build/composition phase is about to start
  360.                 HRESULT PreRun();  // used to notify segments that the graph is built and about to be started
  361.                 HRESULT PostRun(); // called after graph is running
  362.                 HRESULT PreStop(); // used to notify segments that the graph about to be stopped
  363.                 HRESULT PostStop();// called after graph is stopped
  364.                 HRESULT OnEventNotify(LONG lEventCode, LONG_PTR lEventParm1, LONG_PTR lEventParm2);  //DShow events
  365.                 HRESULT Decompose();
  366.         };
  367.  
  368.  
  369.         enum {
  370.         // button state 
  371.          MSVIDCTL_LEFT_BUTTON   =0x0001,
  372.          MSVIDCTL_RIGHT_BUTTON  =0x0002,
  373.          MSVIDCTL_MIDDLE_BUTTON =0x0004,
  374.          MSVIDCTL_X_BUTTON1     =0x0008,
  375.          MSVIDCTL_X_BUTTON2     =0x0010,
  376.          // shift state
  377.          MSVIDCTL_SHIFT =0x0001,
  378.          MSVIDCTL_CTRL  =0x0002,
  379.          MSVIDCTL_ALT   =0x0004,
  380.         };
  381.  
  382.         [object,
  383.                 uuid(301C060E-20D9-4587-9B03-F82ED9A9943C),
  384.                 helpstring("DShow Graph Segment Input Events"),
  385.                 pointer_default(unique)
  386.         ]
  387.         // this should only be implemented used by input(source) devices with ui in the video 
  388.         // stream(specifically dvd).  see discussion of getfocus above
  389.         interface IMSVidGraphSegmentUserInput : IUnknown {
  390.             HRESULT Click();
  391.             HRESULT DblClick();
  392.             HRESULT KeyDown(short* KeyCode, short ShiftState);
  393.             HRESULT KeyPress(short* KeyAscii);
  394.             HRESULT KeyUp(short* KeyCode, short ShiftState);
  395.             HRESULT MouseDown(short ButtonState, short ShiftState, OLE_XPOS_PIXELS x, OLE_YPOS_PIXELS y);
  396.             HRESULT MouseMove(short ButtonState, short ShiftState, OLE_XPOS_PIXELS x, OLE_YPOS_PIXELS y);
  397.             HRESULT MouseUp(short ButtonState, short ShiftState, OLE_XPOS_PIXELS x, OLE_YPOS_PIXELS y);
  398.         }
  399.  
  400.         ///////////////////////////////////////////////////////////////////////////////////////
  401.         [object,
  402.                 uuid(1C15D483-911D-11d2-B632-00C04F79498E),
  403.                 helpstring("DShow Graph Segment Composition Interface"),
  404.                 pointer_default(unique)
  405.         ]
  406.         interface IMSVidCompositionSegment : IMSVidGraphSegment {
  407.                 HRESULT Compose([in] IMSVidGraphSegment *upstream, [in] IMSVidGraphSegment *downstream);
  408.                 [propget, helpstring("The upstream segment being composed by this composition segment")] HRESULT Up([out] IMSVidGraphSegment **upstream);
  409.                 [propget, helpstring("The downstream segment being composed by this composition segment")] HRESULT Down([out] IMSVidGraphSegment **downstream);
  410.  
  411.         };
  412.  
  413.         ///////////////////////////////////////////////////////////////////////////////////////
  414.         [object,
  415.                 uuid(3DD2903E-E0AA-11d2-B63A-00C04F79498E),
  416.                 helpstring("DShow Graph Segment Enumerator"),
  417.                 pointer_default(unique)
  418.         ]
  419.         interface IEnumMSVidGraphSegment : IUnknown {
  420.                 HRESULT Next([in] ULONG celt, [out] IMSVidGraphSegment ** rgelt, [out] ULONG * pceltFetched);
  421.                 HRESULT Skip([in] ULONG celt);
  422.                 HRESULT Reset(void);
  423.                 HRESULT Clone([out] IEnumMSVidGraphSegment** ppenum);
  424.         };
  425.  
  426.         ///////////////////////////////////////////////////////////////////////////////////////
  427.         [object,
  428.                 uuid(DD47DE3F-9874-4f7b-8B22-7CB2688461E7),
  429.                 helpstring("DShow Video Renderer Graph Segment Builder Interface"),
  430.                 pointer_default(unique)
  431.         ]
  432.         interface IMSVidVRGraphSegment : IMSVidGraphSegment {
  433.             // NOTE: because of the way ActiveX controls work there is a tight coupling
  434.             // between the video control itself and the video renderer device segment
  435.             // as a consequence there are important interfaces such as positioning that
  436.             // come through the control via the various ole interfaces which we need to
  437.             // pass to the video renderer but we don't want script to access directly
  438.             // there are also stock properties such as refresh and autosize that must also be
  439.             // implemented directly on the video control and passed through to the video renderer
  440.  
  441.             // from ole interfaces
  442.             [hidden, restricted, propput] HRESULT _VMRendererMode([in] LONG dwMode);
  443.             [hidden, restricted, propput] HRESULT Owner([in] HWND Window);
  444.             [hidden, restricted, propget] HRESULT Owner([out, retval] HWND* Window);
  445.             // from ole interfaces
  446.             [hidden, restricted, propget] HRESULT UseOverlay([out, retval] VARIANT_BOOL *UseOverlayVal);
  447.             [hidden, restricted, propput] HRESULT UseOverlay([in] VARIANT_BOOL UseOverlayVal);
  448.             // from top-level control visibility state
  449.             [hidden, restricted, propget] HRESULT Visible([out, retval] VARIANT_BOOL* Visible);
  450.             [hidden, restricted, propput] HRESULT Visible([in] VARIANT_BOOL Visible);
  451.  
  452.         // clients must go through top-level vidctl interfaces to access this.  since vidctl's ondraw
  453.         // actually paints this, it needs to know about it.
  454.             [propget, hidden, restricted] HRESULT ColorKey([out, retval] OLE_COLOR* ColorKey);
  455.             [propput, hidden, restricted] HRESULT ColorKey([in] OLE_COLOR ColorKey);
  456.             // from ole interfaces and window msgs
  457.             [propget, hidden, restricted] HRESULT Source([out, retval] LPRECT r);
  458.             [propput, hidden, restricted] HRESULT Source([in] RECT r);
  459.             // from ole interfaces and window msgs
  460.             [propget, hidden, restricted] HRESULT Destination([out, retval] LPRECT r);
  461.             [propput, hidden, restricted] HRESULT Destination([in] RECT r);
  462.             [propget, hidden, restricted] HRESULT NativeSize([out] LPSIZE sizeval, [out] LPSIZE aspectratio);
  463.             // letterboxing color if we're using 
  464.             [propget, hidden, restricted] HRESULT BorderColor([out, retval] OLE_COLOR* color);
  465.             [propput, hidden, restricted] HRESULT BorderColor([in] OLE_COLOR color);
  466.             // letterbox or stretch
  467.             [propget, hidden, restricted] HRESULT MaintainAspectRatio([out, retval] VARIANT_BOOL *fMaintain);
  468.             [propput, hidden, restricted] HRESULT MaintainAspectRatio([in] VARIANT_BOOL fMaintain);
  469.  
  470.             // from top-level control refresh method
  471.             [hidden, restricted] HRESULT Refresh();
  472.             [hidden, restricted] HRESULT DisplayChange();
  473.             [hidden, restricted] HRESULT RePaint([in] HDC hdc);
  474.  
  475.         };
  476.  
  477.  
  478. //*****************************************************************************
  479. ///////////////////////////////////////////////////////////////////////////////
  480. //
  481. //  Automation compliant device object interfaces for bpc video control
  482. //
  483. ///////////////////////////////////////////////////////////////////////////////
  484. //*****************************************************************************
  485.  
  486.  
  487. ///////////////////////////////////////////////////////////////////////////////
  488. //
  489. //  input devices
  490. //
  491. ///////////////////////////////////////////////////////////////////////////////
  492.  
  493.         ///////////////////////////////////////////////////////////////////////////////////////
  494.         [object, dual, oleautomation,
  495.                 uuid(1C15D47C-911D-11d2-B632-00C04F79498E),
  496.                 helpstring("MS Video Control Device Interface"),
  497.                 pointer_default(unique)
  498.         ]
  499.         interface IMSVidDevice : IDispatch {
  500.                 // base device properties
  501.                 [propget, id(dispidName)] HRESULT Name([out, retval] BSTR *Name);
  502.                 [propget, id(dispidStatus)] HRESULT Status([out, retval] long *Status);
  503.                 [propput, id(dispidDevPower)] HRESULT Power([in] VARIANT_BOOL Power);
  504.                 [propget, id(dispidDevPower)] HRESULT Power([retval, out] VARIANT_BOOL *Power);
  505.                 // DShow Associated properties
  506.                 // note: filter can be retrieved by QIing for IMSVidGraphSegment and enumerating
  507.                 [propget, id(dispidKSCat)] HRESULT Category([out, retval] BSTR *Guid);
  508.                 [propget, id(dispidCLSID)] HRESULT ClassID([out, retval] BSTR *Clsid);
  509.                 [propget, id(dispid_KSCat), hidden, restricted] HRESULT _Category([out, retval] GUID* Guid);
  510.                 [propget, id(dispid_CLSID), hidden, restricted] HRESULT _ClassID([out, retval] GUID* Clsid);
  511.                 [id(dispid_IsEqualDevice), helpstring("does the passed in device represent the same underlying hardware")] HRESULT IsEqualDevice([in] IMSVidDevice* Device, [out, retval] VARIANT_BOOL* IsEqual);
  512.         };
  513.  
  514.         ///////////////////////////////////////////////////////////////////////////////////////
  515.         [object, dual, oleautomation,
  516.                 uuid(37B0353D-A4C8-11d2-B634-00C04F79498E),
  517.                 helpstring("MS Video Control Input Device Interface"),
  518.                 pointer_default(unique)
  519.         ]
  520.         interface IMSVidInputDevice : IMSVidDevice {
  521.                 [id(dispidViewable)]HRESULT IsViewable([in] VARIANT* v, [out, retval] VARIANT_BOOL *pfViewable);  // can this device view this item?
  522.                 [id(dispidDevView)]HRESULT View([in] VARIANT* v);  // set this device to view this item
  523.         };
  524.  
  525.         ///////////////////////////////////////////////////////////////////////////////////////
  526.         [object, oleautomation,
  527.                 uuid(1C15D480-911D-11d2-B632-00C04F79498E),
  528.                 helpstring("MS Video Control Device Event Interface"),
  529.                 pointer_default(unique)
  530.         ]
  531.         interface IMSVidDeviceEvent : IDispatch {
  532.                 [id(eventidStateChange)]    HRESULT StateChange([in] IMSVidDevice *lpd, [in] long oldState, [in] long newState);
  533.         };
  534.  
  535.         ///////////////////////////////////////////////////////////////////////////////////////
  536.         [object, oleautomation,
  537.                 uuid(37B0353E-A4C8-11d2-B634-00C04F79498E),
  538.                 helpstring("MS Video Control Input Device Event Interface"),
  539.                 pointer_default(unique)
  540.         ]
  541.         interface IMSVidInputDeviceEvent : IDispatch {
  542.         };
  543.  
  544.         ///////////////////////////////////////////////////////////////////////////////////////
  545.         [object, dual, oleautomation,
  546.                 uuid(1C15D47F-911D-11d2-B632-00C04F79498E),
  547.                 helpstring("MS Video Control Video Device Interface"),
  548.                 pointer_default(unique)
  549.         ]
  550.         interface IMSVidVideoInputDevice : IMSVidInputDevice {
  551.         };
  552.  
  553.         ///////////////////////////////////////////////////////////////////////////////////////
  554.  
  555.         [object, dual, oleautomation,
  556.                 uuid(37B03538-A4C8-11d2-B634-00C04F79498E),
  557.                 helpstring("MS Video Control Playback Device Interface"),
  558.                 pointer_default(unique)
  559.         ]
  560.         interface IMSVidPlayback : IMSVidInputDevice {
  561.                 // note: the following methods control the playback device *NOT* the graph.
  562.                 // if the underlying source filter only supports these functions via
  563.                 // imediacontrol on the graph then this device segment object should return E_NOTIMPL.
  564.                 [propget, id(dispid_EnableResetOnStop), helpstring("EnableResetOnStop")] HRESULT EnableResetOnStop([out, retval] VARIANT_BOOL *pVal);
  565.                 [propput, id(dispid_EnableResetOnStop), helpstring("EnableResetOnStop")] HRESULT EnableResetOnStop([in] VARIANT_BOOL newVal);
  566.                 [id(dispidDevRun)] HRESULT Run();
  567.                 [id(dispidDevPause)] HRESULT Pause();
  568.                 [id(dispidDevStop)] HRESULT Stop();
  569.                 [propget, id(dispidDevCanStep)] HRESULT CanStep([in] VARIANT_BOOL fBackwards, [out,retval] VARIANT_BOOL *pfCan);
  570.                 [id(dispidDevStep)] HRESULT Step([in] long lStep);
  571.                 [propput, id(dispidrate), helpstring("Rate")] HRESULT Rate([in] double plRate);
  572.                 [propget, id(dispidrate), helpstring("Rate")] HRESULT Rate([out,retval]double *plRate);
  573.                 [propput, id(dispidposition), helpstring("Position")] HRESULT CurrentPosition([in] long lPosition);
  574.                 [propget, id(dispidposition), helpstring("Position")] HRESULT CurrentPosition([out, retval] long* lPosition);  
  575.                 [propput, id(dispidpositionmode), helpstring("PositionMode")] HRESULT PositionMode([in] PositionModeList lPositionMode);
  576.                 [propget, id(dispidpositionmode), helpstring("PositionMode")] HRESULT PositionMode([out, retval] PositionModeList* lPositionMode); 
  577.                 [propget, id(dispidlength), helpstring("Length")] HRESULT Length([out, retval] long *lLength);
  578.         };
  579.  
  580.         ///////////////////////////////////////////////////////////////////////////////////////
  581.         [object, oleautomation,
  582.                 uuid(37B0353B-A4C8-11d2-B634-00C04F79498E),
  583.                 helpstring("MS Video Control Playback Device Event Interface"),
  584.                 pointer_default(unique)
  585.         ]
  586.         interface IMSVidPlaybackEvent : IMSVidInputDeviceEvent {
  587.                 [id(eventidEndOfMedia)]    HRESULT EndOfMedia([in] IMSVidPlayback *lpd);
  588.         };
  589.  
  590.  
  591.         ///////////////////////////////////////////////////////////////////////////////////////
  592.         [object, dual, oleautomation, hidden,
  593.                 uuid(1C15D47D-911D-11d2-B632-00C04F79498E),
  594.                 helpstring("MS Video Tuner Interface"),
  595.                 pointer_default(unique)
  596.         ]
  597.         interface IMSVidTuner : IMSVidVideoInputDevice {    
  598.                 [propget, id(dispidTune)] HRESULT Tune([out, retval] ITuneRequest **ppTR);
  599.                 [propput, id(dispidTune)] HRESULT Tune([in] ITuneRequest *pTR);
  600.                 [propget, id(dispidTS)] HRESULT TuningSpace([out, retval] ITuningSpace **plTS);
  601.                 [hidden, restricted, propput, id(dispidTS)] HRESULT TuningSpace([in] ITuningSpace* plTS);
  602.         };
  603.  
  604.         ///////////////////////////////////////////////////////////////////////////////////////
  605.         [object, oleautomation, hidden,
  606.                 uuid(1C15D485-911D-11d2-B632-00C04F79498E),
  607.                 helpstring("MS Video Control Tuner Device Event Interface"),
  608.                 pointer_default(unique)
  609.         ]
  610.         interface IMSVidTunerEvent : IMSVidInputDeviceEvent {
  611.                 [id(eventidOnTuneChanged)]    HRESULT TuneChanged([in] IMSVidTuner *lpd);
  612.         };
  613.  
  614.         ///////////////////////////////////////////////////////////////////////////////////////
  615.         [object, dual, oleautomation, hidden,
  616.                 uuid(1C15D47E-911D-11d2-B632-00C04F79498E),
  617.                 helpstring("MS Video TV Tuner Interface"),
  618.                 pointer_default(unique)
  619.         ]
  620.         interface IMSVidAnalogTuner : IMSVidTuner {
  621.                 [propget, id(dispidTuneChan)] HRESULT Channel([out, retval] long *Channel);
  622.                 [propput, id(dispidTuneChan)] HRESULT Channel([in] long Channel);
  623.                 [propget, id(dispidDevVideoFrequency)] HRESULT VideoFrequency([retval, out] long *lcc);
  624.                 [propget, id(dispidDevAudioFrequency)] HRESULT AudioFrequency([retval, out] long *lcc);
  625.                 // note: this is not LCID, this is physical location of device using
  626.                 // international dialing code value
  627.                 [propget, id(dispidDevCountryCode)] HRESULT CountryCode([retval, out] long *lcc);
  628.                 [propput, id(dispidDevCountryCode)] HRESULT CountryCode([in] long lcc);
  629.                 // analog specific shortcut to enabling a different audio component
  630.                 [propget, id(dispidDevSAP)] HRESULT SAP([out, retval] VARIANT_BOOL *pfSapOn);
  631.                 [propput, id(dispidDevSAP)] HRESULT SAP([in] VARIANT_BOOL fSapOn);
  632.                 // methods
  633.                 [id(dispidChannelAvailable)] HRESULT ChannelAvailable([in] long nChannel, [in, out] long *SignalStrength, [retval, out] VARIANT_BOOL *fSignalPresent);
  634.         };
  635.  
  636.         ///////////////////////////////////////////////////////////////////////////////////////
  637.         [object, oleautomation,
  638.                 uuid(1C15D486-911D-11d2-B632-00C04F79498E),
  639.                 helpstring("MS Video Control TV Tuner Device Event Interface"),
  640.                 pointer_default(unique)
  641.         ]
  642.         interface IMSVidAnalogTunerEvent : IMSVidTunerEvent {
  643.  
  644.         };
  645.  
  646.         ///////////////////////////////////////////////////////////////////////////////////////
  647.         [object, dual, oleautomation, hidden,
  648.                 uuid(37B03539-A4C8-11d2-B634-00C04F79498E),
  649.                 helpstring("MS Video Control File Playback Device Interface"),
  650.                 pointer_default(unique)
  651.         ]
  652.         interface IMSVidFilePlayback : IMSVidPlayback {
  653.                 [propget, id(dispidDevFileName)] HRESULT FileName([out, retval] BSTR *FileName);
  654.                 [propput, id(dispidDevFileName)] HRESULT FileName([in] BSTR FileName);
  655.         };
  656.  
  657.         ///////////////////////////////////////////////////////////////////////////////////////
  658.         [object, oleautomation, hidden,
  659.                 uuid(37B0353A-A4C8-11d2-B634-00C04F79498E),
  660.                 helpstring("MS Video Control File Playback Device Event Interface"),
  661.                 pointer_default(unique)
  662.         ]
  663.         interface IMSVidFilePlaybackEvent : IMSVidPlaybackEvent {
  664.  
  665.         };
  666.  
  667.         ///////////////////////////////////////////////////////////////////////////////////////
  668.         typedef enum
  669.         {
  670.             dvdMenu_Title   = 2,
  671.             dvdMenu_Root    = dvdMenu_Title + 1,
  672.             dvdMenu_Subpicture  = dvdMenu_Root + 1,
  673.             dvdMenu_Audio   = dvdMenu_Subpicture + 1,
  674.             dvdMenu_Angle   = dvdMenu_Audio + 1,
  675.             dvdMenu_Chapter = dvdMenu_Angle + 1
  676.         }   DVDMenuIDConstants;
  677.  
  678.         typedef enum 
  679.         {  
  680.            dvdState_Undefined   = -2, 
  681.            dvdState_Unitialized = dvdState_Undefined + 1,
  682.            dvdState_Stopped   = dvdState_Unitialized + 1,
  683.            dvdState_Paused    = dvdState_Stopped + 1,
  684.            dvdState_Running   = dvdState_Paused + 1
  685.         }  DVDFilterState;
  686.  
  687.         typedef enum 
  688.         {   
  689.             dvdStruct_Volume    = 0x1,
  690.             dvdStruct_Title = 0x2,
  691.             dvdStruct_ParentalID    = 0x3,
  692.             dvdStruct_PartOfTitle   = 0x4,
  693.             dvdStruct_Cell  = 0x5,
  694.             dvdStream_Audio = 0x10,
  695.             dvdStream_Subpicture    = 0x11,
  696.             dvdStream_Angle = 0x12,
  697.             dvdChannel_Audio    = 0x20,
  698.             dvdGeneral_Name = 0x30,
  699.             dvdGeneral_Comments = 0x31,
  700.             dvdTitle_Series = 0x38,
  701.             dvdTitle_Movie  = 0x39,
  702.             dvdTitle_Video  = 0x3a,
  703.             dvdTitle_Album  = 0x3b,
  704.             dvdTitle_Song   = 0x3c,
  705.             dvdTitle_Other  = 0x3f,
  706.             dvdTitle_Sub_Series = 0x40,
  707.             dvdTitle_Sub_Movie  = 0x41,
  708.             dvdTitle_Sub_Video  = 0x42,
  709.             dvdTitle_Sub_Album  = 0x43,
  710.             dvdTitle_Sub_Song   = 0x44,
  711.             dvdTitle_Sub_Other  = 0x47,
  712.             dvdTitle_Orig_Series    = 0x48,
  713.             dvdTitle_Orig_Movie = 0x49,
  714.             dvdTitle_Orig_Video = 0x4a,
  715.             dvdTitle_Orig_Album = 0x4b,
  716.             dvdTitle_Orig_Song  = 0x4c,
  717.             dvdTitle_Orig_Other = 0x4f,
  718.             dvdOther_Scene  = 0x50,
  719.             dvdOther_Cut    = 0x51,
  720.             dvdOther_Take   = 0x52
  721.         } DVDTextStringType;
  722.  
  723.         typedef enum 
  724.         {   
  725.             dvdSPExt_NotSpecified   = 0,
  726.             dvdSPExt_Caption_Normal = 1,
  727.             dvdSPExt_Caption_Big    = 2,
  728.             dvdSPExt_Caption_Children   = 3,
  729.             dvdSPExt_CC_Normal  = 5,
  730.             dvdSPExt_CC_Big = 6,
  731.             dvdSPExt_CC_Children    = 7,
  732.             dvdSPExt_Forced = 9,
  733.             dvdSPExt_DirectorComments_Normal    = 13,
  734.             dvdSPExt_DirectorComments_Big   = 14,
  735.             dvdSPExt_DirectorComments_Children  = 15
  736.         }   DVDSPExt;
  737.  
  738.         [object, dual, oleautomation, hidden,
  739.             uuid(CF45F88B-AC56-4EE2-A73A-ED04E2885D3C),
  740.             helpstring("IMSVidWebDVD Interface"),
  741.             pointer_default(unique)
  742.         ]
  743.         interface IMSVidWebDVD : IMSVidPlayback {
  744.  
  745.             HRESULT OnDVDEvent([in]long lEvent, [in]LONG_PTR lParam1, [in]LONG_PTR lParam2);
  746.             [id(dispid_playtitle), helpstring("method PlayTitle")] HRESULT PlayTitle([in] long lTitle);
  747.             [id(dispid_playchapterintitle), helpstring("method PlayChapterInTitle")] HRESULT PlayChapterInTitle([in] long lTitle, [in] long lChapter);
  748.             [id(dispid_playchapter), helpstring("method PlayChapter")] HRESULT PlayChapter([in] long lChapter);
  749.             [id(dispid_playchaptersautostop), helpstring("method PlayChaptersAutoStop")] HRESULT PlayChaptersAutoStop([in] long lTitle, [in] long lstrChapter, [in] long lChapterCount);
  750.             [id(dispid_playattime), helpstring("method PlayAtTime")] HRESULT PlayAtTime([in] BSTR strTime);
  751.             [id(dispid_playattimeintitle), helpstring("method PlayAtTimeInTitle")] HRESULT PlayAtTimeInTitle([in] long lTitle, [in] BSTR strTime);
  752.             [id(dispid_playperiodintitleautostop), helpstring("method PlayPeriodInTitleAutoStop")] HRESULT PlayPeriodInTitleAutoStop([in] long lTitle, [in] BSTR strStartTime, [in] BSTR strEndTime);
  753.             [id(dispid_replaychapter), helpstring("method ReplayChapter")] HRESULT ReplayChapter();
  754.             [id(dispid_playprevchapter), helpstring("method PlayPrevChapter")] HRESULT PlayPrevChapter();
  755.             [id(dispid_playnextchapter), helpstring("method PlayNextChapter")] HRESULT PlayNextChapter();
  756.             [id(dispid_stilloff), helpstring("method StillOff")] HRESULT StillOff();
  757.             [propget, id(dispid_audiolanguage), helpstring("AudioLanguage")] HRESULT AudioLanguage([in] long lStream, [in, defaultvalue(0)] VARIANT_BOOL fFormat, [out, retval] BSTR* strAudioLang);
  758.             [id(dispid_showmenu), helpstring("method ShowMenu")] HRESULT ShowMenu([in] DVDMenuIDConstants MenuID);
  759.             [id(dispid_resume), helpstring("method Resume")] HRESULT Resume();
  760.             [id(dispid_returnfromsubmenu), helpstring("method ReturnFromSubmenu")] HRESULT ReturnFromSubmenu();
  761.             [propget,id(dispid_buttonsavailable), helpstring("ButtonsAvailable")] HRESULT ButtonsAvailable([out, retval] long *pVal);
  762.             [propget,id(dispid_currentbutton), helpstring("CurrentButton")] HRESULT CurrentButton([out, retval] long *pVal);
  763.             [id(dispid_SelectAndActivateButton), helpstring("method SelectAndActivateButton")] HRESULT SelectAndActivateButton([in] long lButton);
  764.             [id(dispid_ActivateButton), helpstring("method ActivateButton")] HRESULT ActivateButton();
  765.             [id(dispid_SelectRightButton), helpstring("method SelectRightButton")] HRESULT SelectRightButton();
  766.             [id(dispid_SelectLeftButton), helpstring("method SelectLeftButton")] HRESULT SelectLeftButton();
  767.             [id(dispid_SelectLowerButton), helpstring("method SelectLowerButton")] HRESULT SelectLowerButton();
  768.             [id(dispid_SelectUpperButton), helpstring("method SelectUpperButton")] HRESULT SelectUpperButton();
  769.             [id(dispid_ActivateAtPosition), helpstring("method ActivateAtPosition")] HRESULT ActivateAtPosition([in] long xPos, [in] long yPos);
  770.             [id(dispid_SelectAtPosition), helpstring("method SelectAtPosition")] HRESULT SelectAtPosition([in] long xPos, [in] long yPos);
  771.             [propget, id(dispid_ButtonAtPosition), helpstring("ButtonAtPosition")] HRESULT ButtonAtPosition([in] long xPos, [in] long yPos, [out, retval] long* plButton);
  772.             [propget, id(dispid_NumberOfChapters), helpstring("NumberOfChapters")] HRESULT NumberOfChapters([in] long lTitle, [out, retval] long *pVal);
  773.             [propget, id(dispid_TotalTitleTime), helpstring("TotalTitleTime")] HRESULT TotalTitleTime([out, retval] BSTR *pVal);
  774.             [propget, id(dispid_TitlesAvailable), helpstring("TitlesAvailable")] HRESULT TitlesAvailable([out, retval] long* pVal);
  775.             [propget, id(dispid_VolumesAvailable), helpstring("VolumesAvailable")] HRESULT VolumesAvailable([out, retval] long *pVal);
  776.             [propget, id(dispid_CurrentVolume), helpstring("CurrentVolume")] HRESULT CurrentVolume([out, retval] long *pVal);
  777.             [propget, id(dispid_CurrentDiscSide), helpstring("CurrentDiscSide")] HRESULT CurrentDiscSide([out, retval] long *pVal);
  778.             [propget, id(dispid_CurrentDomain), helpstring("CurrentDomain")] HRESULT CurrentDomain([out, retval] long *pVal);
  779.             [propget, id(dispid_CurrentChapter), helpstring("CurrentChapter")] HRESULT CurrentChapter([out, retval] long *pVal);
  780.             [propget, id(dispid_CurrentTitle), helpstring("CurrentTitle")] HRESULT CurrentTitle([out, retval] long *pVal);
  781.             [propget, id(dispid_CurrentTime), helpstring("CurrentTime")] HRESULT CurrentTime([out, retval] BSTR *pVal);
  782.             [id(dispid_DVDTimeCode2bstr), helpstring("method DVDTimeCode2bstr")] HRESULT DVDTimeCode2bstr([in] long timeCode, [out, retval] BSTR *pTimeStr);
  783.             [propget, id(dispid_DVDDirectory), helpstring("DVDDirectory")] HRESULT DVDDirectory([out, retval] BSTR *pVal);
  784.             [propput, id(dispid_DVDDirectory), helpstring("DVDDirectory")] HRESULT DVDDirectory([in] BSTR newVal);
  785.             [id(dispid_IsSubpictureStreamEnabled), helpstring("method IsSubpictureStreamEnabled")] HRESULT IsSubpictureStreamEnabled([in] long lstream, [out, retval] VARIANT_BOOL *fEnabled);
  786.             [id(dispid_IsAudioStreamEnabled), helpstring("method IsAudioStreamEnabled")] HRESULT IsAudioStreamEnabled([in] long lstream, [out, retval] VARIANT_BOOL *fEnabled);      
  787.             [propget, id(dispid_CurrentSubpictureStream), helpstring("CurrentSubpictureStream")] HRESULT CurrentSubpictureStream([out, retval] long *pVal);
  788.             [propput, id(dispid_CurrentSubpictureStream), helpstring("CurrentSubpictureStream")] HRESULT CurrentSubpictureStream([in] long newVal);
  789.             [propget, id(dispid_SubpictureLanguage), helpstring("SubpictureLanguage")] HRESULT SubpictureLanguage(long lStream, [out, retval] BSTR* strLanguage);
  790.             [propget, id(dispid_CurrentAudioStream), helpstring("CurrentAudioStream")] HRESULT CurrentAudioStream([out, retval] long *pVal);
  791.             [propput, id(dispid_CurrentAudioStream), helpstring("CurrentAudioStream")] HRESULT CurrentAudioStream([in] long newVal);
  792.             [propget, id(dispid_AudioStreamsAvailable), helpstring("AudioStreamsAvailable")] HRESULT AudioStreamsAvailable([out, retval] long *pVal);
  793.             [propget, id(dispid_AnglesAvailable), helpstring("AnglesAvailable")] HRESULT AnglesAvailable([out, retval] long *pVal);
  794.             [propget, id(dispid_CurrentAngle), helpstring("CurrentAngle")] HRESULT CurrentAngle([out, retval] long *pVal);
  795.             [propput, id(dispid_CurrentAngle), helpstring("CurrentAngle")] HRESULT CurrentAngle([in] long newVal);
  796.             [propget, id(dispid_SubpictureStreamsAvailable), helpstring("SubpictureStreamsAvailable")] HRESULT SubpictureStreamsAvailable([out, retval] long *pVal);
  797.             [propget, id(dispid_SubpictureOn), helpstring("SubpictureOn")] HRESULT SubpictureOn([out, retval] VARIANT_BOOL *pVal);
  798.             [propput, id(dispid_SubpictureOn), helpstring("SubpictureOn")] HRESULT SubpictureOn([in] VARIANT_BOOL newVal);
  799.             [propget, id(dispid_DVDUniqueID), helpstring("DVDUniqueID")] HRESULT DVDUniqueID([out, retval] BSTR *pVal);
  800.             [id(dispid_AcceptParentalLevelChange), helpstring("method AcceptParentalLevelChange")] HRESULT AcceptParentalLevelChange([in] VARIANT_BOOL fAccept, [in] BSTR strUserName, [in] BSTR strPassword); 
  801.             [id(dispid_NotifyParentalLevelChange), helpstring("method NotifyParentalLevelChange")] HRESULT NotifyParentalLevelChange([in] VARIANT_BOOL newVal);
  802.             [id(dispid_SelectParentalCountry), helpstring("method SelectParentalCountry")] HRESULT SelectParentalCountry([in] long lCountry, [in] BSTR strUserName, [in] BSTR strPassword);
  803.             [id(dispid_SelectParentalLevel), helpstring("method SelectParentalLevel")] HRESULT SelectParentalLevel([in] long lParentalLevel, [in] BSTR strUserName, [in] BSTR strPassword);
  804.             [propget, id(dispid_TitleParentalLevels), helpstring("TitleParentalLevels")] HRESULT TitleParentalLevels([in] long lTitle, [out, retval] long* plParentalLevels);
  805.             [propget, id(dispid_PlayerParentalCountry), helpstring("PlayerParentalCountry")] HRESULT PlayerParentalCountry([out, retval] long* plCountryCode);
  806.             [propget, id(dispid_PlayerParentalLevel), helpstring("PlayerParentalLevel")] HRESULT PlayerParentalLevel([out, retval] long* plParentalLevel);
  807.             [id(dispid_Eject), helpstring("method Eject")] HRESULT Eject();
  808.             [id(dispid_UOPValid), helpstring("method UOPValid")] HRESULT UOPValid([in] long lUOP, [out, retval] VARIANT_BOOL* pfValid);
  809.             [propget, id(dispid_SPRM), helpstring("SPRM")] HRESULT SPRM([in] long lIndex, [out, retval] short *psSPRM);
  810.             [propget, id(dispid_GPRM), helpstring("GPRM")] HRESULT GPRM([in] long lIndex, [out, retval] short *psSPRM);
  811.             [propput, id(dispid_GPRM), helpstring("GPRM")] HRESULT GPRM([in] long lIndex, [in] short sValue);
  812.             [propget, id(dispid_DVDTextStringType), helpstring("DVDTextStringType")] HRESULT DVDTextStringType([in] long lLangIndex, [in] long lStringIndex,  [out, retval] DVDTextStringType* pType);
  813.             [propget, id(dispid_DVDTextString), helpstring("DVDTextString")] HRESULT DVDTextString([in] long lLangIndex, [in] long lStringIndex,  [out, retval] BSTR* pstrText);
  814.             [propget, id(dispid_DVDTextNumberOfStrings), helpstring("DVDTextNumberOfStrings")] HRESULT DVDTextNumberOfStrings([in] long lLangIndex, [out, retval] long* plNumOfStrings);
  815.             [propget, id(dispid_DVDTextNumberOfLanguages), helpstring("DVDTextNumberOfLanguages")] HRESULT DVDTextNumberOfLanguages([out, retval] long* plNumOfLangs);
  816.             [propget, id(dispid_DVDTextLanguageLCID), helpstring("DVDTextLanguageLCID")] HRESULT DVDTextLanguageLCID([in] long lLangIndex, [out, retval] long* lcid);
  817.             [id(dispid_RegionChange), helpstring("method RegionChange")] HRESULT RegionChange();
  818.             [propget, id(dispid_DVDAdm), helpstring("DVDAdm")] HRESULT DVDAdm([out, retval] IDispatch* *pVal);
  819.             [id(dispid_DeleteBookmark), helpstring("method DeleteBookmark")] HRESULT DeleteBookmark();
  820.             [id(dispid_RestoreBookmark), helpstring("method RestoreBookmark")] HRESULT RestoreBookmark();
  821.             [id(dispid_SaveBookmark), helpstring("method SaveBookmark")] HRESULT SaveBookmark();
  822.             [id(dispid_SelectDefaultAudioLanguage), helpstring("method SelectDefaultAudioLanguage")] HRESULT SelectDefaultAudioLanguage([in] long lang, [in] long ext);
  823.             [id(dispid_SelectDefaultSubpictureLanguage), helpstring("method SelectDefaultSubpictureLanguage")] HRESULT SelectDefaultSubpictureLanguage([in] long lang, [in] DVDSPExt ext);
  824.             [propget, id(dispid_PreferredSubpictureStream), helpstring("PreferredSubpictureStream")] HRESULT PreferredSubpictureStream([out, retval] long *pVal);
  825.             [propget, id(dispid_DefaultMenuLanguage), helpstring("DefaultMenuLanguage")] HRESULT DefaultMenuLanguage([out, retval] long* lang);
  826.             [propput, id(dispid_DefaultMenuLanguage), helpstring("DefaultMenuLanguage")] HRESULT DefaultMenuLanguage([in] long lang);
  827.             [propget, id(dispid_DefaultSubpictureLanguage), helpstring("DefaultSubpictureLanguage")] HRESULT DefaultSubpictureLanguage([out, retval] long* lang);
  828.             [propget, id(dispid_DefaultAudioLanguage), helpstring("DefaultAudioLanguage")] HRESULT DefaultAudioLanguage([out, retval] long *lang);
  829.             [propget, id(dispid_DefaultSubpictureLanguageExt), helpstring("DefaultSubpictureLanguageExt")] HRESULT DefaultSubpictureLanguageExt([out, retval] DVDSPExt* ext);
  830.             [propget, id(dispid_DefaultAudioLanguageExt), helpstring("DefaultAudioLanguageExt")] HRESULT DefaultAudioLanguageExt([out, retval] long *ext);
  831.             [propget, id(dispid_LanguageFromLCID), helpstring("LanguageFromLCID")] HRESULT LanguageFromLCID([in] long lcid, [out, retval] BSTR* lang);
  832.             [propget, id(dispid_KaraokeAudioPresentationMode), helpstring("KaraokeAudioPresentationMode")] HRESULT KaraokeAudioPresentationMode([out, retval] long *pVal);
  833.             [propput, id(dispid_KaraokeAudioPresentationMode), helpstring("KaraokeAudioPresentationMode")] HRESULT KaraokeAudioPresentationMode([in] long newVal);
  834.             [propget, id(dispid_KaraokeChannelContent), helpstring("KaraokeChannelContent")] HRESULT KaraokeChannelContent([in] long lStream, [in] long lChan, [out, retval] long* lContent);
  835.             [propget, id(dispid_KaraokeChannelAssignment), helpstring("KaraokeChannelAssignment")] HRESULT KaraokeChannelAssignment([in] long lStream, [out, retval] long *lChannelAssignment);
  836.             [id(dispid_RestorePreferredSettings), helpstring("method RestorePreferredSettings")] HRESULT RestorePreferredSettings();
  837.             [propget, id(dispid_ButtonRect), helpstring("ButtonRect")] HRESULT ButtonRect([in] long lButton, [out, retval] IMSVidRect** pRect);
  838.             [propget, id(dispid_DVDScreenInMouseCoordinates), helpstring("DVDScreenInMouseCoordinates")] HRESULT DVDScreenInMouseCoordinates([out, retval] IMSVidRect** ppRect);    
  839.             [propput, id(dispid_DVDScreenInMouseCoordinates), helpstring("DVDScreenInMouseCoordinates")] HRESULT DVDScreenInMouseCoordinates([in] IMSVidRect* pRect);
  840.  
  841.         };
  842.  
  843.         ///////////////////////////////////////////////////////////////////////////////////////
  844.         [object, oleautomation, hidden,
  845.                 uuid(B4F7A674-9B83-49cb-A357-C63B871BE958),
  846.                 helpstring("MS Video Control File Playback Device Event Interface"),
  847.                 pointer_default(unique)
  848.         ]
  849.         interface IMSVidWebDVDEvent : IMSVidPlaybackEvent {
  850.                 [id(eventidDVDNotify), helpstring("Notifies the client about DVD Code")] HRESULT DVDNotify([in]long lEventCode, [in]VARIANT lParam1, [in]VARIANT lParam2);
  851.                 [id(eventidPlayForwards), helpstring("Notifies the client")] HRESULT PlayForwards([in] VARIANT_BOOL bEnabled);
  852.                 [id(eventidPlayBackwards), helpstring("Notifies the client")] HRESULT PlayBackwards([in] VARIANT_BOOL bEnabled);
  853.                 [id(eventidShowMenu), helpstring("Notifies the client")] HRESULT ShowMenu([in]DVDMenuIDConstants, [in] VARIANT_BOOL bEnabled);
  854.                 [id(eventidResume), helpstring("Notifies the client")] HRESULT Resume([in] VARIANT_BOOL bEnabled);
  855.                 [id(eventidSelectOrActivateButton), helpstring("Notifies the client")] HRESULT SelectOrActivateButton([in] VARIANT_BOOL bEnabled);
  856.                 [id(eventidStillOff), helpstring("Notifies the client")] HRESULT StillOff([in] VARIANT_BOOL bEnabled);
  857.                 [id(eventidPauseOn), helpstring("Notifies the client")] HRESULT PauseOn([in] VARIANT_BOOL bEnabled);
  858.                 [id(eventidChangeCurrentAudioStream), helpstring("Notifies the client")] HRESULT ChangeCurrentAudioStream([in] VARIANT_BOOL bEnabled);
  859.                 [id(eventidChangeCurrentSubpictureStream), helpstring("Notifies the client")] HRESULT ChangeCurrentSubpictureStream([in] VARIANT_BOOL bEnabled);
  860.                 [id(eventidChangeCurrentAngle), helpstring("Notifies the client")] HRESULT ChangeCurrentAngle([in] VARIANT_BOOL bEnabled);
  861.                 [id(eventidPlayAtTimeInTitle), helpstring("Notifies the client")] HRESULT PlayAtTimeInTitle([in] VARIANT_BOOL bEnabled);
  862.                 [id(eventidPlayAtTime), helpstring("Notifies the client")] HRESULT PlayAtTime([in] VARIANT_BOOL bEnabled);
  863.                 [id(eventidPlayChapterInTitle), helpstring("Notifies the client")] HRESULT PlayChapterInTitle([in] VARIANT_BOOL bEnabled);
  864.                 [id(eventidPlayChapter), helpstring("Notifies the client")] HRESULT PlayChapter([in] VARIANT_BOOL bEnabled);
  865.                 [id(eventidReplayChapter), helpstring("Notifies the client")] HRESULT ReplayChapter([in] VARIANT_BOOL bEnabled);
  866.                 [id(eventidPlayNextChapter), helpstring("Notifies the client")] HRESULT PlayNextChapter([in] VARIANT_BOOL bEnabled);
  867.                 [id(eventidStop), helpstring("Notifies the client")] HRESULT Stop([in] VARIANT_BOOL bEnabled);
  868.                 [id(eventidReturnFromSubmenu), helpstring("Notifies the client")] HRESULT ReturnFromSubmenu([in] VARIANT_BOOL bEnabled);
  869.                 [id(eventidPlayTitle), helpstring("Notifies the client")] HRESULT PlayTitle([in] VARIANT_BOOL bEnabled);        
  870.                 [id(eventidPlayPrevChapter), helpstring("Notifies the client")] HRESULT PlayPrevChapter([in] VARIANT_BOOL bEnabled);                
  871.                 [id(eventidChangeKaraokePresMode), helpstring("Notifies the client")] HRESULT ChangeKaraokePresMode([in] VARIANT_BOOL bEnabled);                
  872.                 [id(eventidChangeVideoPresMode), helpstring("Notifies the client")] HRESULT ChangeVideoPresMode([in] VARIANT_BOOL bEnabled);                
  873.         };
  874.  
  875.         [object, dual, oleautomation, hidden,
  876.             uuid(B8BE681A-EB2C-47f0-B415-94D5452F0E05),
  877.             helpstring("IMSVidWebDVDAdm Interface"),
  878.             pointer_default(unique)
  879.         ]
  880.         interface IMSVidWebDVDAdm : IDispatch
  881.         {
  882.             [id(dispidChangePassword), helpstring("method ChangePassword")] HRESULT ChangePassword([in]BSTR strUserName, [in]BSTR strOld, [in]BSTR strNew);
  883.             [id(dispidSaveParentalLevel), helpstring("method SaveParentalLevel")] HRESULT SaveParentalLevel([in]long level,[in]BSTR strUserName, [in]BSTR strPassword);
  884.             [id(dispidSaveParentalCountry), helpstring("method SaveParentalCountry")] HRESULT SaveParentalCountry([in]long country,[in]BSTR strUserName, [in]BSTR strPassword);
  885.             [id(dispidConfirmPassword), helpstring("method ConfirmPassword")] HRESULT ConfirmPassword([in]BSTR strUserName, [in]BSTR strPassword, [out, retval] VARIANT_BOOL *pVal);
  886.             [id(dispidGetParentalLevel), helpstring("method GetParentalLevel")] HRESULT GetParentalLevel([out, retval] long *lLevel);
  887.             [id(dispidGetParentalCountry), helpstring("method GetParentalCountry")] HRESULT GetParentalCountry([out, retval] long *lCountry);
  888.             [propget, id(dispidDefaultAudioLCID), helpstring("property DefaultAudioLCID")] HRESULT DefaultAudioLCID([out, retval] long *pVal);
  889.             [propput, id(dispidDefaultAudioLCID), helpstring("property DefaultAudioLCID")] HRESULT DefaultAudioLCID([in] long newVal);
  890.             [propget, id(dispidDefaultSubpictureLCID), helpstring("property DefaultSubpictureLCID")] HRESULT DefaultSubpictureLCID([out, retval] long *pVal);
  891.             [propput, id(dispidDefaultSubpictureLCID), helpstring("property DefaultSubpictureLCID")] HRESULT DefaultSubpictureLCID([in] long newVal);
  892.             [propget, id(dispidDefaultMenuLCID), helpstring("property DefaultMenuLCID")] HRESULT DefaultMenuLCID([out, retval] long *pVal);
  893.             [propput, id(dispidDefaultMenuLCID), helpstring("property DefaultMenuLCID")] HRESULT DefaultMenuLCID([in] long newVal);
  894.             [propget, id(dispidBookmarkOnStop), helpstring("property BookmarkOnStop")] HRESULT BookmarkOnStop([out, retval] VARIANT_BOOL *pVal);
  895.             [propput, id(dispidBookmarkOnStop), helpstring("property BookmarkOnStop")] HRESULT BookmarkOnStop([in] VARIANT_BOOL newVal);
  896.         };
  897.     
  898.  
  899. ///////////////////////////////////////////////////////////////////////////////
  900. //
  901. //  output devices
  902. //
  903. ///////////////////////////////////////////////////////////////////////////////
  904.  
  905.         ///////////////////////////////////////////////////////////////////////////////////////
  906.         [object, dual, oleautomation,
  907.                 uuid(37B03546-A4C8-11d2-B634-00C04F79498E),
  908.                 helpstring("MS Video Control Output Device Interface"),
  909.                 pointer_default(unique)
  910.         ]
  911.         interface IMSVidOutputDevice : IMSVidDevice {
  912.         };
  913.  
  914.         ///////////////////////////////////////////////////////////////////////////////////////
  915.         [object, oleautomation,
  916.                 uuid(2E6A14E2-571C-11d3-B652-00C04F79498E),
  917.                 helpstring("MS Video Control Output Device Event Interface"),
  918.                 pointer_default(unique)
  919.         ]
  920.         interface IMSVidOutputDeviceEvent : IMSVidDeviceEvent {
  921.         };
  922.  
  923. ///////////////////////////////////////////////////////////////////////////////
  924. //
  925. //  features
  926. //
  927. ///////////////////////////////////////////////////////////////////////////////
  928.  
  929.         ///////////////////////////////////////////////////////////////////////////////////////
  930.         [object, dual, oleautomation,
  931.                 uuid(37B03547-A4C8-11d2-B634-00C04F79498E),
  932.                 helpstring("MS Video Control Feature Interface"),
  933.                 pointer_default(unique)
  934.         ]
  935.         interface IMSVidFeature : IMSVidDevice {
  936.         };
  937.  
  938.         ///////////////////////////////////////////////////////////////////////////////////////
  939.         [object, oleautomation,
  940.                 uuid(3DD2903C-E0AA-11d2-B63A-00C04F79498E),
  941.                 helpstring("MS Video Control Feature Event Interface"),
  942.                 pointer_default(unique)
  943.         ]
  944.         interface IMSVidFeatureEvent : IMSVidDeviceEvent {
  945.         };
  946.  
  947.  
  948.         ///////////////////////////////////////////////////////////////////////////////////////
  949.         [object, dual, oleautomation, hidden,
  950.                 uuid(334125C1-77E5-11d3-B653-00C04F79498E),
  951.                 helpstring("MS Video Control Data Services Feature Interface"),
  952.                 pointer_default(unique)
  953.         ]
  954.         interface IMSVidDataServices : IMSVidFeature {
  955.  
  956.         };
  957.  
  958.         ///////////////////////////////////////////////////////////////////////////////////////
  959.         [object, oleautomation, hidden,
  960.                 uuid(334125C2-77E5-11d3-B653-00C04F79498E),
  961.                 helpstring("MS Video Control Data Services Feature Event Interface"),
  962.                 pointer_default(unique)
  963.         ]
  964.         interface IMSVidDataServicesEvent : IMSVidDeviceEvent {
  965.         };
  966.  
  967.  
  968.         ///////////////////////////////////////////////////////////////////////////////////////
  969.         [object, dual, oleautomation, hidden,
  970.                 uuid(99652EA1-C1F7-414f-BB7B-1C967DE75983),
  971.                 helpstring("MS Video Control Closed Captioning Feature Interface"),
  972.                 pointer_default(unique)
  973.         ]
  974.         interface IMSVidClosedCaptioning : IMSVidFeature {
  975.                 [propget, id(dispidCCEnable)] HRESULT Enable([out, retval] VARIANT_BOOL *On);
  976.                 [propput, id(dispidCCEnable)] HRESULT Enable([in] VARIANT_BOOL On);         
  977.         };
  978.  
  979.  
  980.         ///////////////////////////////////////////////////////////////////////////////////////
  981.  
  982.         [
  983.             object, dual, oleautomation, hidden,
  984.             uuid(1600D001-6666-4f66-B1E2-BF3C9FBB9BA6),
  985.             helpstring("Microsoft TVE Video Control Feature - (Aggregates ITVEFeature)"),
  986.             pointer_default(unique)
  987.         ]                                   // IMSVidFeature derivatives dispID's must start at 0x4000 or above
  988.         interface IMSVidTVEGSeg : IMSVidFeature 
  989.         {
  990.             [propget, id(4000),  helpstring("property TVEFilter")]          HRESULT TVEFilter([out, retval] ITVEFilter* *ppFilter); 
  991.             [propget, id(4001),  helpstring("property TVESupervisor")]      HRESULT TVESupervisor([out, retval] ITVESupervisor* *ppSuper);
  992.         };
  993.  
  994.         ///////////////////////////////////////////////////////////////////////////////////////
  995.         [
  996.             object, dual, oleautomation,
  997.             uuid(1600D101-6666-4f66-B1E2-BF3C9FBB9BA6),
  998.             helpstring("Microsoft CA Video Control Feature (Aggregates ICAManager)"),
  999.             pointer_default(unique)
  1000.         ]                                   // IMSVidFeature derivatives dispID's must start at 0x4000 or above
  1001.         interface IMSVidCAGSeg : IMSVidFeature 
  1002.         {
  1003.                             // call when graph changes in way that may change policies (add,delete)
  1004.                 [         id(5000), helpstring("method MarkDirty")]         HRESULT MarkDirty();
  1005.  
  1006.                             // call when get a new tune request (listen for CAManager to see if it gets denied). Put NULL when closing down
  1007.                 [propput, id(5001), helpstring("property TuneRequest")]     HRESULT TuneRequest([in] ITuneRequest *ptunereq);
  1008.  
  1009.         };
  1010.  
  1011. ///////////////////////////////////////////////////////////////////////////////
  1012. //
  1013. //  video renderer
  1014. //
  1015. ///////////////////////////////////////////////////////////////////////////////
  1016. // need to add msvidvidoerenderer2 that has allocator prestenter stuff...
  1017.     typedef enum {
  1018.         sslFullSize,
  1019.         sslClipByOverScan,
  1020.         sslClipByClipRect,
  1021.     } SourceSizeList;   
  1022.  
  1023.         ///////////////////////////////////////////////////////////////////////////////////////
  1024.  
  1025.         [object, dual, oleautomation, hidden,
  1026.                 uuid(37B03540-A4C8-11d2-B634-00C04F79498E),
  1027.                 helpstring("MS Video Control Video Renderer Device Interface"),
  1028.                 pointer_default(unique)
  1029.         ]
  1030.         interface IMSVidVideoRenderer : IMSVidOutputDevice {
  1031.             // Properties
  1032.             [propget, id(dispidCustomCompositorClass)] HRESULT CustomCompositorClass([out, retval] BSTR *CompositorCLSID);
  1033.             [propput, id(dispidCustomCompositorClass)] HRESULT CustomCompositorClass([in] BSTR CompositorCLSID);
  1034.             [propget, hidden, restricted, id(dispid_CustomCompositorClass)] HRESULT _CustomCompositorClass([out, retval] GUID* CompositorCLSID);
  1035.             [propput, hidden, restricted, id(dispid_CustomCompositorClass)] HRESULT _CustomCompositorClass([in] REFCLSID CompositorCLSID);
  1036.             [propget, hidden, restricted, id(dispid_CustomCompositor)] HRESULT _CustomCompositor([out, retval] IVMRImageCompositor** Compositor);
  1037.             [propput, hidden, restricted, id(dispid_CustomCompositor)] HRESULT _CustomCompositor([in] IVMRImageCompositor* Compositor);
  1038.  
  1039.             //
  1040.             [propget, id(dispidMixerBitmap)] HRESULT MixerBitmap([out,retval] IPictureDisp** MixerPictureDisp);          
  1041.             [propget, hidden, restricted, id(dispid_MixerBitmap)] HRESULT _MixerBitmap([out, retval] IVMRMixerBitmap ** MixerPicture);
  1042.             [propput, id(dispidMixerBitmap)] HRESULT MixerBitmap([in] IPictureDisp* MixerPictureDisp);  
  1043.             [propput, hidden, restricted, id(dispid_MixerBitmap)] HRESULT _MixerBitmap([in] VMRALPHABITMAP * MixerPicture);
  1044.             [propget, id(dispidMixerBitmapRect)] HRESULT MixerBitmapPositionRect([out,retval] IMSVidRect **rDest);
  1045.             [propput, id(dispidMixerBitmapRect)] HRESULT MixerBitmapPositionRect([in] IMSVidRect *rDest);
  1046.             [propget, id(dispidMixerBitmapOpacity)] HRESULT MixerBitmapOpacity([out,retval]int *opacity);
  1047.             [propput, id(dispidMixerBitmapOpacity)] HRESULT MixerBitmapOpacity([in]int opacity);
  1048.             [id(dispidSetupMixerBitmap)] HRESULT SetupMixerBitmap([in] IPictureDisp * MixerPictureDisp, [in] long Opacity, [in] IMSVidRect *rDest);
  1049.  
  1050.             // display surface control
  1051.             [propget, id(dispidSourceSize)] HRESULT SourceSize([retval, out] SourceSizeList *CurrentSize);
  1052.             [propput, id(dispidSourceSize)] HRESULT SourceSize([in] SourceSizeList NewSize);
  1053.  
  1054.             [propget, id(dispidDevOverScan), helpstring("trim each source edge by this amount(in hundredths of percent, e.g. 1.75% == 175)")] HRESULT OverScan([retval, out] long *plPercent);
  1055.             [propput, id(dispidDevOverScan), helpstring("trim each source edge by this amount(in hundredths of percent, e.g. 1.75% == 175)")] HRESULT OverScan([in] long lPercent);
  1056.  
  1057.             [propget, id(dispidAvailableSourceRect)] HRESULT AvailableSourceRect([out, retval] IMSVidRect **pRect);
  1058.             [propget, id(dispidMaxVidRect)] HRESULT MaxVidRect([out, retval] IMSVidRect **ppVidRect);
  1059.             [propget, id(dispidMinVidRect)] HRESULT MinVidRect([out, retval] IMSVidRect **ppVidRect); 
  1060.             [propget, id(dispidClippedSourceRect)] HRESULT ClippedSourceRect([out, retval] IMSVidRect **pRect);
  1061.             [propput, id(dispidClippedSourceRect)] HRESULT ClippedSourceRect([in] IMSVidRect *pRect);
  1062.             [propget, id(dispidUsingOverlay)] HRESULT UsingOverlay([out, retval] VARIANT_BOOL *UseOverlayVal);
  1063.             [propput, id(dispidUsingOverlay)] HRESULT UsingOverlay([in] VARIANT_BOOL UseOverlayVal);
  1064.             [id(dispidCapture)] HRESULT Capture([out, retval] IPictureDisp **currentImage);
  1065.             [propget, id(dispid_FramesPerSecond), helpstring("FramesPerSecond")] HRESULT FramesPerSecond([out, retval] long *pVal);
  1066.             [propget, id(dispid_DecimateInput), helpstring("DecimateInput")] HRESULT DecimateInput([out,retval] VARIANT_BOOL *pDeci);
  1067.             [propput, id(dispid_DecimateInput), helpstring("DecimateInput")] HRESULT DecimateInput([in] VARIANT_BOOL pDeci);
  1068.  
  1069.             // Methods
  1070.  
  1071.         };
  1072.  
  1073.         ///////////////////////////////////////////////////////////////////////////////////////
  1074.         [object, oleautomation, hidden,
  1075.                 uuid(37B03545-A4C8-11d2-B634-00C04F79498E),
  1076.                 helpstring("MS Video Control Video Renderer Device Event Interface"),
  1077.                 pointer_default(unique)
  1078.         ]
  1079.         interface IMSVidVideoRendererEvent : IMSVidOutputDeviceEvent {
  1080.                 [id(eventidOverlayUnavailable), helpstring("HW Overlay surface in use or not present")] HRESULT OverlayUnavailable();
  1081.         };
  1082.  
  1083.  
  1084.  
  1085. ///////////////////////////////////////////////////////////////////////////////
  1086. //
  1087. //  video renderer II
  1088. //
  1089. ///////////////////////////////////////////////////////////////////////////////
  1090.  
  1091.         [object, dual, oleautomation, hidden,
  1092.                 uuid(6BDD5C1E-2810-4159-94BC-05511AE8549B),
  1093.                 helpstring("MS Video Control Video Renderer Device Interface"),
  1094.                 pointer_default(unique)
  1095.         ]
  1096.         interface IMSVidVideoRenderer2 : IMSVidVideoRenderer  {
  1097.             // Properties
  1098.             [propget, id(dispidAlloctor)] HRESULT Allocator([out, retval] IUnknown ** AllocPresent);
  1099.             [propget, id(dispid_Allocator), hidden, restricted] HRESULT _Allocator([out, retval] IVMRSurfaceAllocator ** AllocPresent);
  1100.             // Quick Notes on ID's
  1101.             // 1. default id is the lower 32 bits of the IUnknown pointer for the Vidctl
  1102.             // 2. if the id is not yet set get_Allocator_ID will return -1
  1103.             [propget, id(dispidAllocPresentID)] HRESULT Allocator_ID([out, retval] long *ID);
  1104.             [id(dispidSetAllocator)] HRESULT SetAllocator([in] IUnknown* AllocPresent, [in, defaultvalue(-1)] long ID);
  1105.             [id(dispid_SetAllocator), hidden, restricted] HRESULT _SetAllocator([in] IVMRSurfaceAllocator* AllocPresent, [in, defaultvalue(-1)] long ID);
  1106.             // display surface control
  1107.             // Methods
  1108.  
  1109.         };
  1110.  
  1111.         ///////////////////////////////////////////////////////////////////////////////////////
  1112.         [object, oleautomation, hidden,
  1113.                 uuid(7145ED66-4730-4fdb-8A53-FDE7508D3E5E),
  1114.                 helpstring("MS Video Control Video Renderer Device Event Interface"),
  1115.                 pointer_default(unique)
  1116.         ]
  1117.         interface IMSVidVideoRendererEvent2 : IMSVidOutputDeviceEvent {
  1118.                 [id(eventidOverlayUnavailable), helpstring("HW Overlay surface in use or not present")] HRESULT OverlayUnavailable();
  1119.         };
  1120.  
  1121. ///////////////////////////////////////////////////////////////////////////////
  1122. //
  1123. //  audio renderer
  1124. //
  1125. ///////////////////////////////////////////////////////////////////////////////
  1126.  
  1127.         ///////////////////////////////////////////////////////////////////////////////////////
  1128.         [object, dual, oleautomation, hidden,
  1129.                 uuid(37B0353F-A4C8-11d2-B634-00C04F79498E),
  1130.                 helpstring("MS Video Control Audio Renderer Device Interface"),
  1131.                 pointer_default(unique)
  1132.         ]
  1133.         interface IMSVidAudioRenderer : IMSVidOutputDevice {
  1134.             [propput, id(dispidDevVolume)] HRESULT Volume([in] long lVol);
  1135.             [propget, id(dispidDevVolume)] HRESULT Volume([retval, out] long *lVol);
  1136.             [propput, id(dispidDevBalance)] HRESULT Balance([in] long lBal);
  1137.             [propget, id(dispidDevBalance)] HRESULT Balance([retval, out] long *lBal);
  1138.         };
  1139.  
  1140.         ///////////////////////////////////////////////////////////////////////////////////////
  1141.         [object, oleautomation, hidden,
  1142.                 uuid(37B03541-A4C8-11d2-B634-00C04F79498E),
  1143.                 helpstring("MS Video Control Audio Renderer Device Event Interface"),
  1144.                 pointer_default(unique)
  1145.         ]
  1146.         interface IMSVidAudioRendererEvent : IMSVidOutputDeviceEvent {
  1147.         };
  1148.  
  1149. ///////////////////////////////////////////////////////////////////////////////////////
  1150. // device collection
  1151. ///////////////////////////////////////////////////////////////////////////////////////
  1152.  
  1153.         [object, dual, oleautomation, hidden,
  1154.             uuid(C5702CD1-9B79-11d3-B654-00C04F79498E),
  1155.             helpstring("MS Video Control Input Device Writable Collection Interface"),
  1156.             pointer_default(unique)
  1157.         ]
  1158.         interface IMSVidInputDevices : IDispatch {
  1159.                         [propget, id(dispidCount)] HRESULT Count([out, retval] long *lCount);
  1160.                         [propget, id(DISPID_NEWENUM), hidden, restricted] HRESULT _NewEnum([out, retval] IEnumVARIANT **pD);
  1161.                         [propget, id(DISPID_VALUE)] HRESULT Item([in] VARIANT v, [out, retval] IMSVidInputDevice **pDB);
  1162.                         [id(DISPID_ADDITEM)] HRESULT Add([in] IMSVidInputDevice *pDB);
  1163.                         [id(DISPID_REMOVEITEM)] HRESULT Remove([in] VARIANT v);
  1164.         };
  1165.  
  1166.         [object, dual, oleautomation, hidden,
  1167.             uuid(C5702CD2-9B79-11d3-B654-00C04F79498E),
  1168.             helpstring("MS Video Control Output Device Writable Collection Interface"),
  1169.             pointer_default(unique)
  1170.         ]
  1171.         interface IMSVidOutputDevices : IDispatch {
  1172.                         [propget, id(dispidCount)] HRESULT Count([out, retval] long *lCount);
  1173.                         [propget, id(DISPID_NEWENUM), hidden, restricted] HRESULT _NewEnum([out, retval] IEnumVARIANT **pD);
  1174.                         [propget, id(DISPID_VALUE)] HRESULT Item([in] VARIANT v, [out, retval] IMSVidOutputDevice **pDB);
  1175.                         [id(DISPID_ADDITEM)] HRESULT Add([in] IMSVidOutputDevice *pDB);
  1176.                         [id(DISPID_REMOVEITEM)] HRESULT Remove([in] VARIANT v);
  1177.         };
  1178.  
  1179.         [object, dual, oleautomation, hidden,
  1180.             uuid(C5702CD3-9B79-11d3-B654-00C04F79498E),
  1181.             helpstring("MS Video Control Video Renderer Device Writable Collection Interface"),
  1182.             pointer_default(unique)
  1183.         ]
  1184.         interface IMSVidVideoRendererDevices : IDispatch {
  1185.                         [propget, id(dispidCount)] HRESULT Count([out, retval] long *lCount);
  1186.                         [propget, id(DISPID_NEWENUM), hidden, restricted] HRESULT _NewEnum([out, retval] IEnumVARIANT **pD);
  1187.                         [propget, id(DISPID_VALUE)] HRESULT Item([in] VARIANT v, [out, retval] IMSVidVideoRenderer **pDB);
  1188.                         [id(DISPID_ADDITEM)] HRESULT Add([in] IMSVidVideoRenderer *pDB);
  1189.                         [id(DISPID_REMOVEITEM)] HRESULT Remove([in] VARIANT v);
  1190.         };
  1191.  
  1192.         [object, dual, oleautomation, hidden,
  1193.             uuid(C5702CD4-9B79-11d3-B654-00C04F79498E),
  1194.             helpstring("MS Video Control Audio Renderer Device Writable Collection Interface"),
  1195.             pointer_default(unique)
  1196.         ]
  1197.         interface IMSVidAudioRendererDevices : IDispatch {
  1198.                         [propget, id(dispidCount)] HRESULT Count([out, retval] long *lCount);
  1199.                         [propget, id(DISPID_NEWENUM), hidden, restricted] HRESULT _NewEnum([out, retval] IEnumVARIANT **pD);
  1200.                         [propget, id(DISPID_VALUE)] HRESULT Item([in] VARIANT v, [out, retval] IMSVidAudioRenderer **pDB);
  1201.                         [id(DISPID_ADDITEM)] HRESULT Add([in] IMSVidAudioRenderer *pDB);
  1202.                         [id(DISPID_REMOVEITEM)] HRESULT Remove([in] VARIANT v);
  1203.         };
  1204.  
  1205.         [object, dual, oleautomation, hidden,
  1206.             uuid(C5702CD5-9B79-11d3-B654-00C04F79498E),
  1207.             helpstring("MS Video Control Features Writable Collection Interface"),
  1208.             pointer_default(unique)
  1209.         ]
  1210.         interface IMSVidFeatures: IDispatch {
  1211.                         [propget, id(dispidCount)] HRESULT Count([out, retval] long *lCount);
  1212.                         [propget, id(DISPID_NEWENUM), hidden, restricted] HRESULT _NewEnum([out, retval] IEnumVARIANT **pD);
  1213.                         [propget, id(DISPID_VALUE)] HRESULT Item([in] VARIANT v, [out, retval] IMSVidFeature **pDB);
  1214.                         [id(DISPID_ADDITEM)] HRESULT Add([in] IMSVidFeature *pDB);
  1215.                         [id(DISPID_REMOVEITEM)] HRESULT Remove([in] VARIANT v);
  1216.         };
  1217.  
  1218. #endif // TUNING_MODEL_ONLY
  1219.  
  1220. // end of file segment.idl
  1221.